/**
 * 在这里定义和用户相关的路由处理函数，供 /router/user.js 模块进行调用
 */
// router_handler/user.js
const mysql = require('mysql2');

// 直接在文件中创建数据库连接
const db = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: 'Zss280029',
  database: 'my_db_01'
}).promise();//// 启用 Promise 支持

//导入bcrypt包
const bcrypt = require('bcryptjs')

// 注册用户的处理函数
exports.regUser = async (req, res) => {
    try {
        // 获取客户端提交到服务器的用户信息
        // 当客户端发送 POST、PUT 等请求时，数据存储在 req.body 中
        const userinfo = req.body;
        
        // 判断数据是否合法
        if (!userinfo.username || !userinfo.password) {
            //status: 1 表示操作失败，status: 0 表示成功
            return res.send({ status: 1, message: '用户名或密码不能为空！' });
        }

        // 定义sql语句，查询用户名是否被占用
        const sql = `select * from ev_users where username=?`;
        
        // 使用 await 等待数据库查询完成
        const [results] = await db.execute(sql, [userinfo.username]);
        
        // 执行 SQL 语句失败
        if (results === undefined) {
            return res.send({ status: 1, message: '数据库查询失败' });
        }
        
        // 用户名被占用
        if (results.length > 0) {
            return res.send({ status: 1, message: '用户名被占用，请更换其他用户名！' });
        }
        
        // 对密码进行加密
        console.log('加密前的用户信息:', userinfo);
        userinfo.password = bcrypt.hashSync(userinfo.password, 10);
        console.log('加密后的用户信息:', userinfo);

        // 插入新用户到数据库
        const insertSql = `insert into ev_users (username, password) values (?, ?)`;
        const [insertResult] = await db.execute(insertSql, [userinfo.username, userinfo.password]);
        
        // 注册成功
        res.send({ 
            status: 0, 
            message: '注册成功！',
            data: {
                //insertResult.insertId - 获取数据库自动生成的用户ID
                id: insertResult.insertId,
                username: userinfo.username
            }
        });
        
    } catch (err) {
        console.error('注册错误:', err);
        res.send({ status: 1, message: err.message });
    }
}

// 在 router_handler/user.js 中完善登录功能
exports.login = async (req, res) => {
    try {
        const userinfo = req.body;
        
        // 判断数据是否合法
        if (!userinfo.username || !userinfo.password) {
            return res.send({ status: 1, message: '用户名或密码不能为空！' });
        }

        // 查询用户是否存在
        const sql = `select * from ev_users where username=?`;
        const [results] = await db.execute(sql, [userinfo.username]);
        
        // 用户不存在
        if (results.length === 0) {
            return res.send({ status: 1, message: '用户名不存在！' });
        }
        
        const user = results[0];
        
        // 比较密码是否正确
        const passwordIsValid = bcrypt.compareSync(userinfo.password, user.password);
        /*bcrypt.compareSync 工作原理：
        1.从加密后的密码中提取盐值
        2/用相同的盐值加密用户输入的密码
        3.比较两个加密结果是否一致 */
        if (!passwordIsValid) {
            return res.send({ status: 1, message: '密码错误！' });
        }
        
        // 登录成功
        res.send({ 
            status: 0, 
            message: '登录成功！',
            data: {
                id: user.id,
                username: user.username,
                nickname: user.nickname
            }
        });
        
    } catch (err) {
        console.error('登录错误:', err);
        res.send({ status: 1, message: err.message });
    }
}